Index: source/g3d_viewer/main.cpp
===================================================================
--- source/g3d_viewer/main.cpp	(Revision 191)
+++ source/g3d_viewer/main.cpp	(Arbeitskopie)
@@ -2,7 +2,6 @@
 
 #include <stdexcept>
 
-#include "graphics_factory_basic_gl.h"
 #include "graphics_interface.h"
 #include "util.h"
 
@@ -11,8 +10,15 @@
 using namespace Shared::Graphics::Gl;
 using namespace Shared::Util;
 
-using namespace std;
+using std::exception;
 
+#if (wxUSE_UNICODE == 1)
+#define STRCONV(x) wxConvUTF8.cMB2WC(x)
+#else
+#define STRCONV(x) x
+#endif
+
+
 namespace Shared{ namespace G3dViewer{
 
 // ===============================================
@@ -24,7 +30,7 @@
 
 MainWindow::MainWindow(const string &modelPath): 
 	wxFrame(
-		NULL, -1, winHeader.c_str(), 
+		NULL, -1, STRCONV(winHeader.c_str()), 
 		wxPoint(Renderer::windowX, Renderer::windowY), 
 		wxSize(Renderer::windowW, Renderer::windowH))
 {
@@ -37,38 +43,33 @@
 	
 	glCanvas = new GlCanvas(this);
 
-	glCanvas->SetCurrent();
-
-	renderer->init();
-
-	
 	menu= new wxMenuBar();
 
 	//menu
 	menuFile= new wxMenu();
-	menuFile->Append(miFileLoad, "Load");
-	menu->Append(menuFile, "File");
+	menuFile->Append(miFileLoad, wxT("Load"));
+	menu->Append(menuFile, wxT("File"));
 
 	//mode
 	menuMode= new wxMenu();
-	menuMode->AppendCheckItem(miModeNormals, "Normals");
-	menuMode->AppendCheckItem(miModeWireframe, "Wireframe");
-	menuMode->AppendCheckItem(miModeGrid, "Grid");
-	menu->Append(menuMode, "Mode");
+	menuMode->AppendCheckItem(miModeNormals, wxT("Normals"));
+	menuMode->AppendCheckItem(miModeWireframe, wxT("Wireframe"));
+	menuMode->AppendCheckItem(miModeGrid, wxT("Grid"));
+	menu->Append(menuMode, wxT("Mode"));
 
 	//mode
 	menuSpeed= new wxMenu();
-	menuSpeed->Append(miSpeedSlower, "Slower");
-	menuSpeed->Append(miSpeedFaster, "Faster");
-	menu->Append(menuSpeed, "Speed");
+	menuSpeed->Append(miSpeedSlower, wxT("Slower"));
+	menuSpeed->Append(miSpeedFaster, wxT("Faster"));
+	menu->Append(menuSpeed, wxT("Speed"));
 
 	//custom color
 	menuCustomColor= new wxMenu();
-	menuCustomColor->AppendCheckItem(miColorRed, "Red");
-	menuCustomColor->AppendCheckItem(miColorBlue, "Blue");
-	menuCustomColor->AppendCheckItem(miColorYellow, "Yellow");
-	menuCustomColor->AppendCheckItem(miColorGreen, "Green");
-	menu->Append(menuCustomColor, "Custom Color");
+	menuCustomColor->AppendCheckItem(miColorRed, wxT("Red"));
+	menuCustomColor->AppendCheckItem(miColorBlue, wxT("Blue"));
+	menuCustomColor->AppendCheckItem(miColorYellow, wxT("Yellow"));
+	menuCustomColor->AppendCheckItem(miColorGreen, wxT("Green"));
+	menu->Append(menuCustomColor, wxT("Custom Color"));
 
 	menuMode->Check(miModeGrid, true);
 	menuCustomColor->Check(miColorRed, true);
@@ -88,13 +89,6 @@
 
 	timer = new wxTimer(this);
 	timer->Start(40);
-
-	if(!modelPath.empty()){
-		Model *tmpModel= new ModelGl();
-		renderer->loadTheModel(tmpModel, modelPath);
-		model= tmpModel;
-		GetStatusBar()->SetStatusText(getModelInfo().c_str());
-	}
 }
 
 MainWindow::~MainWindow(){
@@ -104,6 +98,17 @@
 	delete glCanvas;
 }
 
+void MainWindow::init(){
+	glCanvas->SetCurrent();
+	renderer->init();
+	if(!modelPath.empty()){
+		Model *tmpModel= new ModelGl();
+		renderer->loadTheModel(tmpModel, modelPath);
+		model= tmpModel;
+		GetStatusBar()->SetStatusText(STRCONV(getModelInfo().c_str()));
+	}
+}
+
 void MainWindow::onPaint(wxPaintEvent &event){
 	renderer->reset(GetClientSize().x, GetClientSize().y, playerColor);
 	renderer->transform(rotX, rotY, zoom);
@@ -141,13 +146,14 @@
 void MainWindow::onMenuFileLoad(wxCommandEvent &event){
 	string fileName;
 	wxFileDialog fileDialog(this);
-	fileDialog.SetWildcard("G3D files (*.g3d)|*.g3d");
+	fileDialog.SetWildcard(wxT("G3D files (*.g3d)|*.g3d"));
 	if(fileDialog.ShowModal()==wxID_OK){
 		delete model;
 		Model *tmpModel= new ModelGl();
-		renderer->loadTheModel(tmpModel, fileDialog.GetPath().c_str());
+		fileName = wxFNCONV(fileDialog.GetPath());
+		renderer->loadTheModel(tmpModel, fileName);
 		model= tmpModel;
-		GetStatusBar()->SetStatusText(getModelInfo().c_str());
+		GetStatusBar()->SetStatusText(wxString(getModelInfo().c_str(), wxConvUTF8));
 	}
 }
 
@@ -252,7 +258,7 @@
 // =====================================================
 
 GlCanvas::GlCanvas(MainWindow *	mainWindow):
-	wxGLCanvas(mainWindow, -1)
+	wxGLCanvas(mainWindow, -1, wxDefaultPosition)
 {
 	this->mainWindow = mainWindow;
 }
@@ -261,13 +267,8 @@
 	mainWindow->onMouseMove(event);
 }
 
-void GlCanvas::onPaint(wxPaintEvent &event){
-	mainWindow->onPaint(event);
-}
-
 BEGIN_EVENT_TABLE(GlCanvas, wxGLCanvas)
 	EVT_MOTION(GlCanvas::onMouseMove)
-	EVT_PAINT(GlCanvas::onPaint)
 END_EVENT_TABLE()
 
 // ===============================================
@@ -277,11 +278,12 @@
 bool App::OnInit(){
 	string modelPath;
 	if(argc==2){
-		modelPath= argv[1];
+		modelPath = wxFNCONV(argv[1]);
 	}
 	
 	mainWindow= new MainWindow(modelPath);
 	mainWindow->Show();
+	mainWindow->init();
 	return true;
 }
 
@@ -290,9 +292,9 @@
 		return wxApp::MainLoop();
 	}
 	catch(const exception &e){
-		wxMessageDialog(NULL, e.what(), "Exception", wxOK | wxICON_ERROR).ShowModal();
-		return 0;
+		wxMessageDialog(NULL, STRCONV(e.what()), wxT("Exception"), wxOK | wxICON_ERROR).ShowModal();
 	}
+	return 0;
 }
 
 int App::OnExit(){
Index: source/g3d_viewer/main.h
===================================================================
--- source/g3d_viewer/main.h	(Revision 191)
+++ source/g3d_viewer/main.h	(Arbeitskopie)
@@ -7,12 +7,13 @@
 #include <wx/timer.h>
 #include <wx/glcanvas.h>
 
+#include "graphics_factory_basic_gl.h"
 #include "renderer.h"
 #include "util.h"
 #include "window.h"
 
-using Shared::Platform::Window;
-using Shared::Platform::MouseState;
+//using Shared::Platform::Window;
+//using Shared::Platform::MouseState;
 
 using std::string;
 
@@ -70,6 +71,8 @@
 	MainWindow(const string &modelPath);
 	~MainWindow();
 
+	void init();
+
 	void Notify();
 
 	void onPaint(wxPaintEvent &event);
Index: mk/linux/Jamfile
===================================================================
--- mk/linux/Jamfile	(Revision 191)
+++ mk/linux/Jamfile	(Arbeitskopie)
@@ -26,7 +26,7 @@
 }
 
 Library glestlib : $(LIB_SOURCES) ;
-ExternalLibs glestlib : SDL GL GLU XERCES VORBIS VORBISFILE OGG OPENAL LUA ;
+ExternalLibs glestlib : SDL GL GLU XERCES VORBISFILE OPENAL LUA ;
 IncludeDir glestlib : $(LIB_INCLUDE_DIRS) ;
 
 #### Game ####
@@ -55,7 +55,7 @@
 
 Application glest : $(GLEST_SOURCES) ;
 LinkWith glest : glestlib ;
-ExternalLibs glest : SDL GL GLU XERCES VORBIS VORBISFILE OGG OPENAL LUA ;
+ExternalLibs glest : SDL GL GLU XERCES VORBISFILE OPENAL LUA ;
 IncludeDir glest : ../shared_lib/include/$(LIB_INCLUDE_DIRS) $(GLEST_DIRS) ;
 
 #### Editor ####
@@ -69,7 +69,22 @@
 
   Application glest_editor : $(GLEST_MAP_SOURCES) ;
   LinkWith glest_editor : glestlib ;
-  ExternalLibs glest_editor : SDL GL GLU XERCES VORBIS VORBISFILE OGG OPENAL WX ;
+  ExternalLibs glest_editor : SDL GL GLU XERCES VORBISFILE OPENAL WX ;
   IncludeDir glest_editor : ../shared_lib/include/$(LIB_INCLUDE_DIRS) $(GLEST_MAP_DIRS) ;
 }
 
+### Viewer ###
+if $(WX_AVAILABLE) = "yes" {
+  SubDir TOP g3d_viewer ;
+
+  GLEST_VIEWER_DIRS = . ;
+  for i in $(GLEST_DIRS) {
+    GLEST_VIEWER_SOURCES += [ Wildcard $(i) : *.cpp *.h ] ;
+  }
+
+  Application glest_g3dviewer : $(GLEST_VIEWER_SOURCES) ;
+  LinkWith glest_g3dviewer : glestlib ;
+  ExternalLibs glest_g3dviewer : SDL GL GLU XERCES VORBISFILE OPENAL WX ;
+  IncludeDir glest_g3dviewer : ../shared_lib/include/$(LIB_INCLUDE_DIRS) $(GLEST_VIEWER_DIRS) ;
+}
+
Index: mk/linux/autogen.sh
===================================================================
--- mk/linux/autogen.sh	(Revision 191)
+++ mk/linux/autogen.sh	(Arbeitskopie)
@@ -34,4 +34,6 @@
 if [ ! -d glest_map_editor ]; then
   ln -sf ../../source/glest_map_editor .
 fi
-
+if [ ! -d g3d_viewer ]; then
+  ln -sf ../../source/g3d_viewer .
+fi
